home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / yahoo / yahooformat.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  7KB  |  139 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import re
  5. from util import flatten, hex2bin
  6.  
  7. color = lambda hex: ('font color="#' + hex + '"', 'font')
  8. codes = {
  9.     1: 'b',
  10.     2: 'i',
  11.     4: 'u',
  12.     'l': '' }
  13. color_codes = {
  14.     30: '000000',
  15.     31: '0000FF',
  16.     32: '008080',
  17.     33: '808080',
  18.     34: '008000',
  19.     35: 'FF0080',
  20.     36: '800080',
  21.     37: 'FF8000',
  22.     38: 'FF0000',
  23.     39: '808000' }
  24. rereplace = [
  25.     ('<font (.+?)>', '<font %s>'),
  26.     ('</font>', '</font>'),
  27.     ('<s>', '<s>'),
  28.     ('</s>', '</s>'),
  29.     ('<alt (?:.+?)>', ''),
  30.     ('</alt>', ''),
  31.     ('<fade (?:.+?)>', ''),
  32.     ('</fade>', '')]
  33.  
  34. def hexstr_to_tuple(hexstr):
  35.     return []([ ord(a) for a in hex2bin(' '.join((lambda .0: for x in .0:
  36. ''.join(x))(zip(hexstr[::2], hexstr[1::2])))) ])
  37.  
  38. color_lookup = dict((lambda .0: for k, v in .0:
  39. (hexstr_to_tuple(v), str(k)))(color_codes.iteritems()))
  40. format_codes = {
  41.     '1': ('b', 'b'),
  42.     '2': ('i', 'i'),
  43.     '4': ('u', 'u'),
  44.     '#': ((lambda hex: 'font color="#%s"' % hex), 'font'),
  45.     'face': ((lambda face: 'font face="%s"' % face), 'font'),
  46.     'size': ((lambda size: 'font style="font-size: %spt"' % size), 'font') }
  47. format_lookup = {
  48.     'b': '1',
  49.     'i': '2',
  50.     'u': '4' }
  51. format_codes.update(dict((lambda .0: for k, v in .0:
  52. (str(k), color(v)))(color_codes.iteritems())))
  53.  
  54. def flatten(s):
  55.     for a in s:
  56.         for e in a:
  57.             yield e
  58.         
  59.     
  60.  
  61.  
  62. def codepair(code, tag):
  63.     if isinstance(tag, tuple):
  64.         (start, end) = tag
  65.     else:
  66.         start = end = tag
  67.     return [
  68.         None,
  69.         ((None, '\x1b[%sm' % code if start else ''), '\x1b[x%sm' % code if end else '')]
  70.  
  71. codes.update((lambda .0: for code, color in .0:
  72. ('' + str(code), ('font color="#%s"' % color, 'font')))(color_codes.iteritems()))
  73. replace = list(flatten((lambda .0: for code, tag in .0:
  74. codepair(code, tag))(codes.iteritems())))
  75. rereplace = [ (re.compile(txt, re.IGNORECASE), repl) for txt, repl in rereplace ]
  76.  
  77. def tohtml(s):
  78.     s = s.encode('xml')
  79.     for txt, repl in replace:
  80.         s = s.replace(txt, repl)
  81.     
  82.     for pattern, repl in rereplace:
  83.         match = pattern.search(s)
  84.         for a in match.groups():
  85.             continue
  86.             splat = _[1][a.decode('xml')]
  87.             s = s[:i] + repl % tuple(splat) + s[j:]
  88.             match = pattern.search(s)
  89.             continue
  90.             [] if repl == '<font %s>' else []
  91.     
  92.     color = re.compile('\x1b\\[#([^m]+)m')
  93.     match = color.search(s)
  94.     while match:
  95.         (i, j) = match.span()
  96.         s = s[:i] + '<font color="#%s">' % match.group(1) + s[j:]
  97.         match = color.search(s)
  98.     for tag in ('font', 'b', 'i', 'u', 's'):
  99.         s = s + ''.join([
  100.             '</%s>' % tag] * (s.count('<%s' % tag) - s.count('</%s' % tag)))
  101.     
  102.     return s
  103.  
  104.  
  105. def color2code(color):
  106.     return ''.join([
  107.         '\x1b[',
  108.         color_lookup.get(color, '#' + ''.join((lambda .0: for c in .0:
  109. '%02x' % c)(color[:3]))),
  110.         'm'])
  111.  
  112.  
  113. def format(format, string):
  114.     before = '<font face="%(face)s" size="%(size)s">' % format
  115.     after = ''
  116.     
  117.     try:
  118.         foregroundcolor = format.get('foregroundcolor')
  119.     except KeyError:
  120.         pass
  121.  
  122.     before += color2code(foregroundcolor)
  123.     for a in ('bold', 'italic', 'underline'):
  124.         if format.get(a, False):
  125.             before += '\x1b[' + format_lookup[a[0]] + 'm'
  126.             continue
  127.     
  128.     return before + string + after
  129.  
  130.  
  131. def main():
  132.     tests = '\n\n<font size="10">\x1b[30mhey, who\'s this?\n<font size="14">normal</font>\n\x1b[1m<font size="14">bold</font>\x1b[x1m\n\x1b[1m<font size="14">bold</font>\x1b[x1m<font size="14">notbold</font>\n\x1b[1mbold\x1b[x1m\x1b[2mitalic\x1b[1mbolditalic\x1b[4mall\x1b[x1m\x1b[x2mjustunderline\n<not html>\n\x1b[38mred\n\x1b[#ff3737moffre\n<font face="Chiller" size="15">test</font>\n<font face="Chiller" size=\'15\'>test</font>\n\x1b[#FF0000mhello\x1b[#000000m\n\x1b[1m\x1b[4m\x1b[2m\x1b[#000000m<font face="Arial"><font size="20">\x1b[lmhttp://www.digsby.com\x1b[xlm\x1b[x2m\x1b[x4m\x1b[x1m\n\n'.strip().split('\n')
  133.     for t in tests:
  134.         print repr(t)
  135.         print repr(tohtml(t))
  136.         print 
  137.     
  138.  
  139.